#!/bin/bash

# 前端管理后台重启脚本
# 功能：检查并终止已有的React开发服务器进程，然后重新启动服务

echo "=== 招聘平台管理后台重启脚本 ==="

# 设置项目目录
PROJECT_DIR="/Users/jinxian/zhaoqi/zhaoqi_admin"
cd "$PROJECT_DIR" || exit 1

# 强制终止所有相关进程
echo "正在强制终止所有相关进程..."

# 1. 终止所有React开发服务器相关进程
echo "终止React开发服务器进程..."
ps aux | grep "react-scripts start" | grep -v grep | awk '{print $2}' | xargs -r kill -9 2>/dev/null
sleep 1

# 2. 终止所有npm start相关进程
echo "终止npm start进程..."
ps aux | grep "npm.*start" | grep -v grep | awk '{print $2}' | xargs -r kill -9 2>/dev/null
sleep 1

# 3. 终止所有node相关进程（包含zhaoqi_admin路径的）
echo "终止相关Node.js进程..."
ps aux | grep "node.*zhaoqi_admin" | grep -v grep | awk '{print $2}' | xargs -r kill -9 2>/dev/null
sleep 1

# 4. 强制终止占用3000端口的所有进程
echo "强制终止占用3000端口的进程..."
lsof -ti:3000 | xargs -r kill -9 2>/dev/null
sleep 1

# 5. 再次检查并清理任何残留进程
echo "清理残留进程..."
pkill -9 -f "react-scripts start" 2>/dev/null
pkill -9 -f "npm.*start" 2>/dev/null
sleep 1

echo "✅ 所有相关进程已强制终止"
echo ""

# 最终检查端口状态
if lsof -Pi :3000 -sTCP:LISTEN -t >/dev/null 2>&1; then
    echo "⚠️  端口3000仍被占用，进行最后清理..."
    lsof -ti:3000 | xargs -r kill -9 2>/dev/null
    sleep 2
fi

echo "🚀 正在启动管理后台服务..."
echo "项目目录: $PROJECT_DIR"
echo "启动时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""

# 检查是否存在node_modules，如果不存在则安装依赖
if [ ! -d "node_modules" ]; then
    echo "📦 检测到缺少依赖，正在安装..."
    npm install
    if [ $? -ne 0 ]; then
        echo "❌ 依赖安装失败，请检查网络连接或npm配置"
        exit 1
    fi
    echo "✅ 依赖安装完成"
    echo ""
fi

# 启动React开发服务器
echo "🌟 启动React开发服务器..."
npm start &

# 等待服务启动
echo "⏳ 等待服务启动..."
sleep 5

# 检查服务是否成功启动
if lsof -Pi :3000 -sTCP:LISTEN -t >/dev/null 2>&1; then
    echo ""
    echo "🎉 管理后台启动成功！"
    echo "📍 访问地址: http://localhost:3000"
    echo "🔧 开发模式已启用，代码修改将自动重载"
    echo ""
    echo "💡 提示："
    echo "   - 按 Ctrl+C 停止服务"
    echo "   - 日志将在下方显示"
    echo "   - 如需重启，请再次运行此脚本"
    echo ""
    echo "=== 服务日志 ==="
else
    echo ""
    echo "❌ 管理后台启动失败！"
    echo "🔍 请检查："
    echo "   1. 端口3000是否被其他程序占用"
    echo "   2. Node.js和npm是否正确安装"
    echo "   3. 项目依赖是否完整"
    echo ""
    exit 1
fi

# 等待用户输入或进程结束
wait
